package com.ywx.intelligentaicodegeneration.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import com.ywx.intelligentaicodegeneration.mode.dto.chathistory.ChatHistoryQueryRequest;
import com.ywx.intelligentaicodegeneration.mode.entity.ChatHistory;
import com.ywx.intelligentaicodegeneration.mode.entity.User;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;

import java.time.LocalDateTime;

/**
 * 对话历史 服务层。
 *
 * @author <a href=\"https://gitee.com/JING5201314/aicode-gen-pro\">ywx</a>
 */
public interface ChatHistoryService extends IService<ChatHistory> {

    /**
     * 添加对话历史
     *
     * @param message     消息
     * @param messageType 消息类型
     * @param appId       应用ID
     * @param userId      用户ID
     * @return 是否添加成功
     */
    boolean addChatHistory(String message, String messageType, Long appId, Long userId);

    /**
     * 根据应用ID删除对话历史
     *
     * @param appId 应用ID
     * @return 是否删除成功
     */
    boolean deleteByAppId(Long appId);

    /**
     * 构造查询条件
     *
     * @param chatHistoryQueryRequest 查询条件
     * @return 查询条件
     */
    QueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);

    /**
     * 根据应用ID分页查询对话历史
     * @param appId 应用ID
     * @param pageSize 每页大小
     * @param lastCreateTime 最后创建时间
     * @param loginUser 登录用户
     * @return 分页结果
     */
    Page<ChatHistory> listAppChatHistoryByPage(Long appId, Integer pageSize, LocalDateTime lastCreateTime, User loginUser);

    /**
     * 加载对话历史到chatMemory
     * @param appId 应用ID
     * @param chatMemory chatMemory
     * @param maxCount 加载的对话历史的最大条数
     * @return 加载数量
     */
    int loadChatHistoryToMemory(Long appId, MessageWindowChatMemory chatMemory,int maxCount);

}
